在行中显示数据

本示例展示如何使用 List 组件,通过自定义的行布局来展示结构化数据。每一行显示一个人的姓名和电话号码,布局清晰,排版整洁,采用了 SwiftUI 风格的堆叠式组件。

概览

你将学到如何:

  • 定义自定义的行组件(PersonRowView
  • 使用 List 展示数据集合
  • 应用文本样式和系统图标
  • 使用 VStackHStack 进行布局排版

示例代码

1. 导入依赖并定义数据类型

1import { HStack, Label, List, Navigation, NavigationStack, Script, Text, VStack } from "scripting"
2
3type Person = {
4  name: string
5  phoneNumber: string
6}

2. 创建行组件

PersonRowView 是用于渲染单行内容的组件。它使用纵向堆叠将姓名与电话号码分隔,并使用适当的字体样式和颜色来区分信息层级。

1function PersonRowView({
2  person
3}: {
4  person: Person
5}) {
6  return <VStack
7    alignment={"leading"}
8    spacing={3}
9  >
10    <Text
11      foregroundStyle={"label"}
12      font={"headline"}
13    >{person.name}</Text>
14    <HStack
15      spacing={3}
16      foregroundStyle={"secondaryLabel"}
17      font={"subheadline"}
18    >
19      <Label
20        title={person.phoneNumber}
21        systemImage={"phone"}
22      />
23    </HStack>
24  </VStack>
25}

3. 在导航堆栈中展示列表

使用 NavigationStackList 来展示所有的行。你可以设置导航栏标题以说明视图内容。

1function Example() {
2  const staff: Person[] = [
3    {
4      name: "Juan Chavez",
5      phoneNumber: "(408) 555-4301",
6    },
7    {
8      name: "Mei Chen",
9      phoneNumber: "(919) 555-2481"
10    }
11  ]
12
13  return <NavigationStack>
14    <List
15      navigationTitle={"Display data inside a row"}
16      navigationBarTitleDisplayMode={"inline"}
17    >
18      {staff.map(person =>
19        <PersonRowView
20          person={person}
21        />
22      )}
23    </List>
24  </NavigationStack>
25}

4. 展示界面并退出脚本

使用 Navigation.present 弹出该页面视图,并在页面关闭后退出脚本。

1async function run() {
2  await Navigation.present({
3    element: <Example />
4  })
5
6  Script.exit()
7}
8
9run()

总结

本示例展示了如何在行中展示数据,核心要点包括:

  • 使用 VStackHStack 构建布局结构
  • 定义可复用的类型化行组件
  • 使用 List 渲染结构化的数据集合
  • 搭配图标和标签增强可读性和视觉效果

适用于联系人列表、搜索结果、记录信息等多种数据展示场景,支持灵活扩展与样式自定义。